package com.fr.report.script.function;

import com.fr.base.FRContext;
import com.fr.base.core.DateUtils;
import com.fr.report.script.Function;
import com.fr.report.script.Function.Type;
import com.fr.report.script.NormalFunction;
import com.fr.util.Utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;

public class TODATE extends NormalFunction
{
  public static final Date arguments2Date(Object[] paramArrayOfObject)
  {
    Object localObject1;
    Object localObject2;
    Object localObject4;
    if (paramArrayOfObject.length < 1)
      return new Date();
    if (paramArrayOfObject.length == 1)
    {
      localObject1 = paramArrayOfObject[0];
      if (localObject1 instanceof Date)
        return ((Date)localObject1);
      if (localObject1 instanceof Calendar)
        return ((Calendar)localObject1).getTime();
      if (localObject1 instanceof Number)
      {
        long l = ((Number)localObject1).longValue();
        localObject4 = new Date();
        ((Date)localObject4).setTime(l * 3600000L * 24L);
        return localObject4;
      }
      return DateUtils.object2Date(localObject1, false);
    }
    if (paramArrayOfObject.length == 2)
    {
      localObject1 = paramArrayOfObject[0];
      localObject2 = paramArrayOfObject[1];
    }
    try
    {
      return new SimpleDateFormat(Utils.objectToString(localObject2).trim()).parse(Utils.objectToString(localObject1).trim());
    }
    catch (ParseException localObject3)
    {
      FRContext.getLogger().log(Level.WARNING, localParseException1.getMessage(), localParseException1);
      break label231:
      if (paramArrayOfObject.length == 3)
      {
        localObject1 = paramArrayOfObject[0];
        localObject2 = paramArrayOfObject[1];
        Object localObject3 = paramArrayOfObject[2];
        localObject4 = new Locale(localObject3.toString());
        try
        {
          return new SimpleDateFormat(Utils.objectToString(localObject2).trim(), (Locale)localObject4).parse(Utils.objectToString(localObject1).trim());
        }
        catch (ParseException localParseException2)
        {
          FRContext.getLogger().log(Level.WARNING, localParseException2.getMessage(), localParseException2);
        }
      }
    }
    label231: return ((Date)new Date());
  }

  public Object run(Object[] paramArrayOfObject)
  {
    return arguments2Date(paramArrayOfObject);
  }

  public Function.Type getType()
  {
    return Function.DATETIME;
  }

  public String getCN()
  {
    return "TODATE()函数可以将各种日期形式的参数转换为日期类型。\n它有三种参数的形式：\n1 参数是一个日期型的参数，那么直接将这个参数返回。\n示例：\nTODATE(DATE(2007,12,12))返回2007年12月12日组成的日期。\n2 参数是以从1970年1月1日0时0分0秒开始的毫秒数，返回对应的时间。\n示例：\nTODATE(1023542354746)返回2002年6月8日。\n3 参数是日期格式的文本，那么返回这个文本对应的日期。\n示例：\nTODATE(\"2007/10/15\")返回2007年10月5日组成的日期。\nTODATE(\"2007-6-8\")返回2007年6月8日组成的日期。\n4 有两个参数，第一个参数是一个日期格式的文本，第二个参数是用来解析日期的格式。\n示例：\nTODATE(\"1/15/07\",\"mm/dd/yy\")返回07年1月15日组成的日期。\n5 有三个参数，第一个参数是一个日期格式的文本，第二个参数是用来解析日期的格式，第三个参数为解析日期的语言，如：zh（中文），en（英文）。\n示例：\nTODATE(\"星期三 1/15/07\",\"EEE mm/dd/yy\", \"zh\")返回07年1月15日组成的日期，使用“zh（中文）”才能够正常解析“星期三”这个字符串。";
  }

  public String getEN()
  {
    return "TODATE() Function returns parameter(s) to a Date type object.\nThe four parameter signatures are defined below:\n\n1. Parameter is a Date type, then function returns the parameter.\n\n   Example: TODATE(DATE(2007,12,12)) returns Date object of 12/12/2007\n\n2. Parameter is a number of milliseconds since 00:00:00 01/01/1970, then function returns the calculated Date object.\n\n   Example: TODATE(1023542354746) returns 06/08/2002\n\n3. Parameter is a date format string， then function returns the converted Date object.\n\n   Example: TODATE(\"2007/10/15\") returns Date object of 10/15/2007\n\n4. Parameter 1 is a date format string, and parameter 2 is the date format sting, then function uses the format to convert the date string and returns the correct Date object.\n\n   Example: TODATE(\"1/15/07\",\"mm/dd/yy\") returns Date of 01/15/2007\n";
  }
}